import java.util.concurrent.Semaphore;

public class Simulacion {

	Archivos manejador;
	String[] lineas;
	Organizador evento1, evento2, evento3;
	Distribuidor distribuye;
	Redes_De_Cobranza redPagos, abitab;
	Boleteria boleteria;
	PuntoDeVenta punto;
	ManejadorCajas man;
	CajaRedDeCobranza cajaRP1, cajaRP2, cajaRP3, cajaAbitab1, cajaAbitab2, cajaAbitab3;
	CajaBoleteria cajaB1, cajaB2;
	CajaDefault cajaDefault1;
	Empresa empresaNacional;
	static Semaphore semaforoSacarEntradas, sacarClientesRed,
	sacarClientesAbitab, sacarClientesBoleteria,
	actualizarListaClientes, actualizarListaClientesBol,
	actualizarListaClientesA,sacarClientesDefault,actualizarListaClientesD;

	@SuppressWarnings("static-access")
	public Simulacion() {
		evento1 = new Organizador("Cine", 300);
		evento2 = new Organizador("UruguayVSEslovenia", 1000);
		evento3 = new Organizador("Teatro", 300);
		distribuye = new Distribuidor();
		empresaNacional = new Empresa("Turismar");
		distribuye.agregarEventos(evento1);
		distribuye.agregarEventos(evento2);
		distribuye.agregarEventos(evento3);
		Simulacion.sacarClientesRed = new Semaphore(1);
		Simulacion.sacarClientesBoleteria = new Semaphore(1);
		Simulacion.sacarClientesAbitab = new Semaphore(1);
		Simulacion.semaforoSacarEntradas = new Semaphore(1);
		Simulacion.actualizarListaClientes = new Semaphore(1);
		Simulacion.actualizarListaClientesBol = new Semaphore(1);
		Simulacion.actualizarListaClientesA = new Semaphore(1);
		Simulacion.actualizarListaClientesD = new Semaphore(1);
		Simulacion.sacarClientesDefault = new Semaphore(1);
		Archivos archivo = new Archivos();
		man = new ManejadorCajas();
		lineas = archivo.leerArchivo("ArchivoEntradas");
		empresaNacional.pedirEntradas("UruguayVSEslovenia", 1, 30, distribuye);
		redPagos = new Redes_De_Cobranza("RedPagos", distribuye, lineas);
		abitab = new Redes_De_Cobranza("Abitab", distribuye, lineas);
		boleteria = new Boleteria("Boleteria", distribuye, lineas);
		punto = new PuntoDeVenta("Internet", distribuye, lineas);
		cajaRP1 = new CajaRedDeCobranza(sacarClientesRed,
				semaforoSacarEntradas, actualizarListaClientes, 1, redPagos);
		cajaRP2 = new CajaRedDeCobranza(sacarClientesRed,
				semaforoSacarEntradas, actualizarListaClientes, 2, redPagos);
		cajaRP3 = new CajaRedDeCobranza(sacarClientesRed,
				semaforoSacarEntradas, actualizarListaClientes, 3, redPagos);
		cajaB1 = new CajaBoleteria(sacarClientesBoleteria,
				semaforoSacarEntradas, actualizarListaClientesBol, 1, boleteria);
		cajaB2 = new CajaBoleteria(sacarClientesBoleteria,
				semaforoSacarEntradas, actualizarListaClientesBol, 2, boleteria);
		cajaAbitab1 = new CajaRedDeCobranza(sacarClientesAbitab,
				semaforoSacarEntradas, actualizarListaClientesA, 1, abitab);
		cajaAbitab2 = new CajaRedDeCobranza(sacarClientesAbitab,
				semaforoSacarEntradas, actualizarListaClientesA, 2, abitab);
		cajaAbitab3 = new CajaRedDeCobranza(sacarClientesAbitab,
				semaforoSacarEntradas, actualizarListaClientesA, 3, abitab);
		cajaDefault1 = new CajaDefault(sacarClientesDefault, semaforoSacarEntradas, actualizarListaClientesD, 1, punto);
		cajaAbitab1.start();
		cajaAbitab2.start();
		cajaAbitab3.start();
		cajaRP1.start();
		cajaRP2.start();
		cajaRP3.start();
		cajaB1.start();
		cajaB2.start();
		cajaDefault1.start();
		

	}

}
